#!/usr/bin/env bash
set -e
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# Function :CentOS7.X 在线同步repo镜像
# Platform :RedHatEL7.x Based Platform
# Version  :1.01
# Date     :2022-10-19
# Author   :mugoLH
# Contact  :hxsaj@126.com
# Company  :
# depend on:
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
info_p(){  printf "\e[1;32;40m%-18s %-1s\n\e[0m" "${1}" "${2}"  >&1 ;}
tips_p(){  printf "\e[1;36;40m%-18s %-1s\n\e[0m" "${1}" "${2}"  >&1 ;}
error_p(){ printf "\e[1;35;40m%-18s %-1s\n\e[0m" "${1}" "${2}"  >&1 ;}

#  变量列表 List of common variables
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# 同步源站
Rsync_source=rsync.mirrors.ustc.edu.cn
Rsync_source=rsync.mirrors.ustc.edu.cn/centos-vault/6.10/os/x86_64/
# 期望同步的版本
Version='7'
# 同步的架构
Arch='x86_64'
# 同步的目录项
CentOS_Repos=(os updates extras centosplus storage virt cloud atomic configmanagement fasttrack)
# 根目录位置
Root_Dir=/data/repos


#  函数列表 Function list
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# 同步centos镜像
function rsync_base(){
    # 函数参数变量
    Root_Dir=${1}
    Rsync_source=${2}
    Version=${3}
    Arch=${4}
    V_OS=${5}

    # 同步基础镜像软件
    for REPOS in ${CentOS_Repos[@]};do

        info_p "[ 同步模块: ]" "${REPOS}"

        # 检查本地目录，如没有这新建
        [ ! -d ${Root_Dir}/${V_OS}/${Version}/${REPOS}/${Arch} ] && mkdir -p ${Root_Dir}/${V_OS}/${Version}/${REPOS}/${Arch}

        rsync -az --delete --exclude='repodata' rsync://${Rsync_source}/${V_OS}/${Version}/${REPOS}/${Arch}/ ${Root_Dir}/${V_OS}/${Version}/${REPOS}/${Arch}/

        createrepo --update ${Root_Dir}/${V_OS}/${Version}/${REPOS}/${Arch}/

    done

    # 同步gpgkey
    rsync -az --delete --exclude='repodata' rsync://${Rsync_source}/${V_OS}/RPM-GPG-KEY-CentOS-${Version} ${Root_Dir}/${V_OS}/
}

# 同步epel镜像
function rsync_epel(){
    # 函数参数变量
    Root_Dir=${1}
    Rsync_source=${2}
    Version=${3}
    Arch=${4}

    info_p "[ 同步模块: ]" "epel"

    # 检查目录
    [ ! -d ${Root_Dir}/epel/${Version}/${Arch} ] && mkdir -p ${Root_Dir}/epel/${Version}/${Arch}
    # 同步epel镜像软件
    rsync -az --delete --exclude='repodata' rsync://${Rsync_source}/epel/${Version}/${Arch}/ ${Root_Dir}/epel/${Version}/${Arch}

    createrepo --update ${Root_Dir}/epel/${Version}/${Arch}/

    # 同步gpqkey
    rsync -az --delete --exclude='repodata' rsync://${Rsync_source}/epel/RPM-GPG-KEY-EPEL-${Version} ${Root_Dir}/epel/
}


#  主程序 Procedural Subject
# ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
# 同步7版本
rsync_base ${Root_Dir} ${Rsync_source} "7"    ${Arch} centos
# 同步6版本
rsync_base ${Root_Dir} ${Rsync_source} "6.10" ${Arch} centos-vault
# 同步epel
rsync_epel ${Root_Dir} ${Rsync_source} "7"    ${Arch}


